package com.shujia

import scala.io.{BufferedSource, Source}

object Demo24Implicit3 {
  def main(args: Array[String]): Unit = {
    // 3、隐式转换类
    val file = new ReadFile("scala/data/students.txt")
    val list: List[String] = file.read()
    list.foreach(println)

    val file2 = new ReadFile("scala/data/score.txt")
    val list2: List[String] = file2.read()
    list2.foreach(println)

    val list3: List[String] = "scala/data/words.txt".read()
    list3.foreach(println)

    "scala/data/words.txt".printR()

  }

  // 定义了一个类，需要传入一个path，然后有一个read方法
  // 会根据传入的path读取相应的文件并转成List返回
  // 加上implicit表示ReadFile类是一个隐式转换类
  // 动态的给 ReadFile类 所需的参数path的类型String 加上read方法及其他在类中定义的方法
  // 相当于在当前作用域范围内的所有的String类型的变量都会自动获得ReadFile类中的read方法及其他在类中定义的方法
  // 被implicit修饰的类的构造方法只能定义一个参数
  implicit class ReadFile(path: String) {
    def read(): List[String] = {
      val bs: BufferedSource = Source
        .fromFile(path)

      val list: List[String] = bs.getLines().toList


      bs.close()

      list
    }

    def printR(): Unit ={
      println("ReadFile")
    }
  }
}


